﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using ShopNet.Model;
using ShopNet.Util;

namespace ShopNet.Admin
{
    public partial class UploadImageProduto : System.Web.UI.Page
    {
        //private Produto prod = new Produto();
        #region Propriedades

        protected int IdProduto
        {
            get
            {
                if (ViewState["IdProduto"] == null) return 0;
                return Convert.ToInt32(ViewState["IdProduto"]);
            }

            set { ViewState.Add("IdProduto", value); }
        }

        #endregion

        #region Metodos

        #region CarregarImagens

        private void CarregarImagens()
        {
            IList<Imagem> lista = NServico.Db.Imagems.Where(p => p.IdProduto == IdProduto).ToList();
            Session.Add("lista", lista);
            gvImagens.DataSource = lista;
            gvImagens.DataBind();
        }

        #endregion

        #region DeleteFile

        private void DeleteFile(string strFileName)
        {//Delete file from the server
            if (strFileName.Trim().Length > 0)
            {
                FileInfo fi = new FileInfo(strFileName);
                if (fi.Exists)//if file exists delete it
                {
                    fi.Delete();
                }
            }
        }

        #endregion

        #endregion

        #region Eventos

        #region Page_Load

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (!string.IsNullOrWhiteSpace(Request.QueryString["IdProduto"]) &&
                    BaseCompareValidator.CanConvert(Request.QueryString["IdProduto"], ValidationDataType.Integer))
                {
                    IdProduto = Convert.ToInt32(Request.QueryString["IdProduto"]);

                }
                Produto p = NServico.Db.Produtos.FirstOrDefault(pr => pr.IdProduto == IdProduto);
                lIdProduto.Text = IdProduto.ToString();
                lDescricao.Text = p.Descricao;
                CarregarImagens();
            }
        }

        #endregion

        #region bEnviarImagens_Click

        protected void bEnviarImagens_Click(object sender, EventArgs e)
        {
            if ((fuImagem.PostedFile != null) && (fuImagem.PostedFile.ContentLength > 0))
            {

                //determine file name
                string sFileName = Path.GetFileName(fuImagem.PostedFile.FileName);
                string sFileDir = Server.MapPath(@"~/Imagem/produtos/");
                try
                {
                    Imagem i = new Imagem()
                    {
                        IdProduto = IdProduto,
                        Nome = sFileName
                    };
                    fuImagem.PostedFile.SaveAs(sFileDir + sFileName);
                    if (i.IdImagem < 1)
                    {
                        NServico.Db.Imagems.InsertOnSubmit(i);
                    }
                    NServico.Db.SubmitChanges();
                    CarregarImagens();
                }
                catch (Exception)//in case of an error
                {
                    DeleteFile(sFileDir + sFileName);
                    throw;
                }
            }
        }

        #endregion

        #region gvImagens_RowDataBound

        protected void gvImagens_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType != DataControlRowType.DataRow) return;

            IList<Imagem> lista = (IList<Imagem>)Session["lista"];
            Imagem im = lista[e.Row.DataItemIndex];

            Image i = (Image)e.Row.FindControl("ibImagem");
            HtmlAnchor aImagem = (HtmlAnchor)e.Row.FindControl("aImagem");
            if (im.Principal)
            {
                e.Row.CssClass = "rowSelected";
            }

            string sFileName = im.Nome;// i.AlternateText;
            const string sFileDir = "../Imagem/produtos/";
            i.ImageUrl = sFileDir + sFileName;
            aImagem.HRef = sFileDir + sFileName;

            LinkButton lDelete = e.Row.FindControl("lDelete") as LinkButton;
            lDelete.OnClientClick = "return confirm('Tem certeza que deseja excluir a Imagem?')";
        }

        #endregion

        #region gvImagens_RowDeleting

        protected void gvImagens_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            LinkButton lDelete = (LinkButton)gvImagens.Rows[e.RowIndex].FindControl("lDelete");
            //Imagem i = NServico.Db.Imagems.FirstOrDefault(im => im.IdImagem == int.Parse(lDelete.CommandArgument));
            IList<Imagem> lista = (IList<Imagem>)Session["lista"];
            Imagem i = lista[e.RowIndex];
            if (i.IdImagem > 0)
            {
                NServico.Db.Imagems.DeleteOnSubmit(i);
            }

            NServico.Db.SubmitChanges();
            string sFileName = i.Nome;
            const string sFileDir = "../Imagem/produtos/";
            DeleteFile(sFileDir + sFileName);
            Funcoes.Mensagem(Funcoes.TipoMensagem.Ok, spamMensagem, "Imagem excluída com sucesso.");
            CarregarImagens();
        }

        #endregion

        #endregion

        protected void gvImagens_OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Principal")
            {
                IList<Imagem> lista = (IList<Imagem>)Session["lista"];
                foreach(Imagem i in lista )
                {
                    i.Principal = false;
                    if (i.IdImagem == int.Parse(e.CommandArgument.ToString()))
                        i.Principal = true;
                }
                NServico.Db.SubmitChanges();
                CarregarImagens();
            }
        }

        protected void bIncluirNovo_Click(object sender, EventArgs e)
        {
            Response.Redirect("EditarProduto.aspx", true);
        }
    }
}